package org.alis.smallcc.designpatterns.behavior.iterator;

import java.util.function.Consumer;

/**
 * 集合
 * 
 * @param <T> 类型
 * @author luochuan
 */
public interface Aggregate<T> {
	/**
	 * 添加
	 * 
	 * @return 移除
	 */
	int add(T t);

	/**
	 * 删除
	 * 
	 * @return 之前的下标
	 */
	int remove(T t);
	
	/**
	 * 根据下标删除
	 * @param index 下标
	 * @return 删除的对象
	 */
	T remove(int index);

	/**
	 * 迭代器模式
	 * 
	 * @return 迭代器
	 */
	Iterator<T> iterator();

	/**
	 * for循环
	 * 
	 * @param consumer
	 */
	void forEach(Consumer<T> consumer);

	/**
	 * 
	 * @return
	 */
	int size();

	/**
	 * 获取元素
	 * 
	 * @param cursor 游标
	 * @return 元素
	 */
	T get(int cursor);

}
